Napichnuti na okenni proceduru

Otázka od: Petr Brant

8. 10. 2002 8:31

Ahoj vespolek, placam komponentu, ve ktere se potrebuji napichnout na okenni
proceduru EditBoxu. Delam to takto:

procedure TAdvancedEditBox.SetAssignedEdit(const Value: TEdit);
var p: pointer;
begin
 FAssignedEdit := Value;
 if Value<> nil then
 begin
  { napíchnutí na wnd proceduru poioazeného editu... }
  if AssignedEditHandle<> 0 then SetWindowLong(AssignedEditHandle,
GWL_WNDPROC, LongInt(PrevEditWndProc));
  {pokud by se poioazovalo za bihu...}
  AssignedEditHandle:= Value.Handle;
  PrevEditWndProc := Pointer(GetWindowLong(Value.Handle, GWL_WNDPROC));
  p := MakeObjectInstance(NewEditWndProc);
  SetWindowLong(Value.Handle, GWL_WNDPROC, LongInt(p));
 end else
 begin
  { návrat k puvodní wnd proceduoe...}
  SetWindowLong(AssignedEditHandle, GWL_WNDPROC, LongInt(PrevEditWndProc));
  AssignedEditHandle:= 0;
 end;
end;

Pracuje to v pohode, ale chci se zeptat pritomnych odborniku, zda neni neco
takoveho jiz zapouzdreno ve VCL, tohle mam jen odnekud opsane a nejsem si na
100 % jist, zda to je koser.

Diky a zdravim

RNDr. Petr Brant [brant@dcomm.cz]
D&COMM s.r.o.
Korunovační 6
Praha 7
tel. +420724007234

Odpovedá: Blazek Jaroslav

8. 10. 2002 11:33

Ahoj,

> brant@dcomm.cz 8.10.02 8:23 >>>
>Ahoj vespolek, placam komponentu, ve ktere se potrebuji napichnout na okenni
>proceduru EditBoxu. Delam to takto:

  private
    OldWndProc:TWndMethod;
    procedure NewWndProc(var AMsg : TMessage);

constructor TNewEdit.Create(AOwner : TComponent);
begin
 inherited;
 OldWndProc := WindowProc;
 WindowProc := NewWndProc;
end;

procedure TNewEdit.NewWndProc(var AMsg : TMessage);
begin
 // nejaky kod

 OldWndProc(AMsg);
end;


S pozdravem

Bc. Jaroslav Blazek
Access-IT Ceska Lipa
mailto:jaroslav.blazek@access-it.cz
http://www.access-it.cz
ICQ# : 133673990
+420605/813644